package thread_pool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/*
目标：掌握线程池的创建
 */
public class ThreadPoolTest1 {
    public static void main(String[] args) {
        //通过ThreadPoolExecutor类来创建一个线程池对象
        ThreadPoolExecutor pool =new ThreadPoolExecutor(3, 5, 10,
                TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(4),
               Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
        //参数分别为：corePoolSize（线程池的基本大小），maximumPoolSize（线程池最大线程数），
        // keepAliveTime（非核心线程的存活时间），TimeUnit（时间单位），workQueue（任务队列）
        //任务队列有两种选择：ArrayBlockingQueue（数组BlockingQueue）和LinkedBlockingQueue（链表BlockingQueue）

        Runnable target = new MyRunable();
        pool.execute(target);        //  线程池会自动创建一个新的线程，自动处理这个任务
        pool.execute(target);        //
        pool.execute(target);        //
        pool.execute(target);        // 复用前面的核心线程
        pool.execute(target);        //

        pool.shutdown();             // 关闭线程池，不再接受新的任务，等待线程池中任务执行完毕

    }
}
